import Util from '@/assets/js/util.js'

export default {
  userNameValidator (rule, value, cb) {
    if (!/^[a-zA-Z\d@_]{5,32}$/.test(value)) {
      cb(new Error('请输入正确的登录账号名'))
    } else {
      cb()
    }
  },
  allDiscountValidator (rule, value, cb) {
    if (!/^\d{1,3}(.\d{1,2})?$/.test(value)) {
      cb(new Error('请输入正确的数字，最多可保留两位小数'))
    } else if ((value-0 > 100)) {
      cb(new Error(`请输入正确的折扣范围不超过100.00`))
    } else {
      cb()
    }
  },
  emailValidator (rule, value, cb) {
    if (!value) {
      cb()
    } else {
      if (!/^\w[-\w.]*@([A-Za-z0-9][-A-Za-z0-9]{0,61}[A-Za-z0-9]\.)+[A-Za-z]{2,6}$/.test(value)) {
        cb(new Error('请输入正确的邮箱'))
      } else {
        cb()
      }
    }
  },

  phoneValidator (rule, value, cb) {
    // /^([\u4e00-\u9fa5]{2,20}|[a-zA-Z.\s]{2,20})$/
    if (value && !/^\d{8}$/.test(value)) {
      cb(new Error('请输入正确的8位手机号'))
    } else {
      cb()
    }
  },
  custNameValidator (rule, value, cb) {
    // 仅支持8-64位中英文和空格
    let kongge = value.match(/ /g)?.length || 0
    const resultChina = value.match(/[\u4e00-\u9fa5]/g)?.length*2 || 0
    const resultEnglish = value.match(/[a-zA-Z]/g)?.length || 0
    const len = kongge + resultChina + resultEnglish
    if (!(/^[a-zA-Z\u4E00-\u9FA5]+(\s+[a-zA-Z\u4E00-\u9FA5]+)*$/.test(value) && len>=8 && len<=64)) {
      cb(new Error('请输入正确的客户名称'))
    } else {
      cb()
    }
  },
  licenceNoValidator (rule, value, cb) {
    // 仅支持英文大小写和数字
    if (!/^[a-zA-Z0-9\-]*$/.test(value)) {
      cb(new Error('请输入正确的证件号'))
    } else {
      cb()
    }
  },
  nameValidator (rule, value, cb) {
    // /^([\u4e00-\u9fa5]{2,20}|[a-zA-Z.\s]{2,20})$/
    if (/^\s*$/.test(value)) {
      cb(new Error('不能全为空格'))
    } else {
      if (!/^([0-9A-Za-z\u4e00-\u9fa5]{2,30}|[a-zA-Z.\s]{2,30})$/.test(value)) {
        cb(new Error('请输入正确的姓名'))
      } else {
        cb()
      }
    }
  },
  // 内循环账号注册 用户名 5-22位，包括：大小写字母、数字、下划线、@
  registerUsername (rule, value, cb) {
    if (/^[a-zA-Z0-9_@]{5,22}$/.test(value)) {
      return cb()
    } else {
      return cb(new Error('登录账号名设置不符合要求'))
    }
  },
  // 内循环账号注册 强密码
  // 8-20个字符，包含大小写字母、数字、特殊字符（$除外）、不包含键盘连续字符
  // 不包含3位及以上重复数字、字母、特殊字符；不包含3位及以上连续数字、字母
  registerPassword (rule, value, cb) {
    const result = /^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?!.*\s).{8,20}$/.test(value)
    // 特殊字符
    const specialValue = Util.containsSpecialCharacter(value)
    // 敏感词汇
    // const reservedResult = Util.checkReservedWords(value)
    // 键盘连续字符
    const continuousKeyboard = Util.checkKeyboardContinuousChar(value)
    // 连续数字、字母
    const continuousDigitCharOrletter = Util.checkContinuousDigitCharOrletter(value)
    // 连续重复数字、字母、特殊字符
    const continuousSameChar = Util.checkContinuousSameChar(value)
    // 校验空格
    const hasSpace = /\s+/.test(value)
    if (hasSpace) {
      return cb(new Error('密码不能包含空格'))
    }
    if (result && specialValue && !continuousKeyboard && !continuousDigitCharOrletter && !continuousSameChar) {
      return cb()
    } else {
      return cb(new Error('密码设置不符合要求'))
    }
  },
  // 6位图形验证码校验
  captchaValidator (rule, value, cb) {
    if (value.length !== 6) {
      cb(new Error('请输入6位图形验证码'))
    } else {
      cb()
    }
  },
  // 11位手机号校验
  mobilePhoneValidator (rule, value, cb) {
    if (value && !/^1\d{10}$/.test(value)) {
      cb(new Error('请输入正确的11位手机号'))
    } else {
      cb()
    }
  },
  // 客户标签名称校验：支持中文，最多20个字符
  validateTagName (rule, value, cb) {
    if (/^[\u4e00-\u9fa5]{1,20}$/.test(value)) {
      cb()
    } else {
      cb('请输入正确的标签名称')
    }
  }
}